<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<title>MIC: Referencia de la Clase ControladorServidor</title>

<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
  $(document).ready(initResizable);
</script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
  $(document).ready(function() { searchBox.OnSelectItem(0); });
</script>

</head>
<body>
<div id="top"><!-- do not remove this div! -->


<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  
  
  <td style="padding-left: 0.5em;">
   <div id="projectname">MIC
   
   </div>
   <div id="projectbrief">Motor de Inteligencia de Comercio en tiempo real</div>
  </td>
  
  
  
 </tr>
 </tbody>
</table>
</div>

<!-- Generado por Doxygen 1.7.6.1 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Buscar');
</script>
  <div id="navrow1" class="tabs">
    <ul class="tablist">
      <li><a href="index.html"><span>Página&#160;principal</span></a></li>
      <li><a href="pages.html"><span>Páginas&#160;relacionadas</span></a></li>
      <li class="current"><a href="annotated.html"><span>Clases</span></a></li>
      <li><a href="files.html"><span>Archivos</span></a></li>
      <li>
        <div id="MSearchBox" class="MSearchBoxInactive">
        <span class="left">
          <img id="MSearchSelect" src="search/mag_sel.png"
               onmouseover="return searchBox.OnSearchSelectShow()"
               onmouseout="return searchBox.OnSearchSelectHide()"
               alt=""/>
          <input type="text" id="MSearchField" value="Buscar" accesskey="S"
               onfocus="searchBox.OnSearchFieldFocus(true)" 
               onblur="searchBox.OnSearchFieldFocus(false)" 
               onkeyup="searchBox.OnSearchFieldChange(event)"/>
          </span><span class="right">
            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
          </span>
        </div>
      </li>
    </ul>
  </div>
  <div id="navrow2" class="tabs2">
    <ul class="tablist">
      <li><a href="annotated.html"><span>Lista&#160;de&#160;clases</span></a></li>
      <li><a href="classes.html"><span>Índice&#160;de&#160;clases</span></a></li>
      <li><a href="hierarchy.html"><span>Jerarquía&#160;de&#160;la&#160;clase</span></a></li>
      <li><a href="functions.html"><span>Miembros&#160;de&#160;las&#160;clases</span></a></li>
    </ul>
  </div>
</div>
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
  initNavTree('classControladorServidor.html','');
</script>
<div id="doc-content">
<div class="header">
  <div class="summary">
<a href="#pub-methods">Métodos públicos</a>  </div>
  <div class="headertitle">
<div class="title">Referencia de la Clase ControladorServidor</div>  </div>
</div><!--header-->
<div class="contents">
<!-- doxytag: class="ControladorServidor" --><!-- doxytag: inherits="ResolvedorConsultas,ResolvedorEntradas,ContenedorClientes,ContenedorAgentes" -->
<p><code>#include &lt;<a class="el" href="ControladorServidor_8h_source.html">ControladorServidor.h</a>&gt;</code></p>
<div class="dynheader">
Diagrama de herencias de ControladorServidor</div>
<div class="dyncontent">
 <div class="center">
  <img src="classControladorServidor.png" usemap="#ControladorServidor_map" alt=""/>
  <map id="ControladorServidor_map" name="ControladorServidor_map">
<area href="classResolvedorConsultas.html" alt="ResolvedorConsultas" shape="rect" coords="0,0,131,24"/>
<area href="classResolvedorEntradas.html" alt="ResolvedorEntradas" shape="rect" coords="141,0,272,24"/>
<area href="classContenedorClientes.html" alt="ContenedorClientes" shape="rect" coords="282,0,413,24"/>
<area href="classContenedorAgentes.html" alt="ContenedorAgentes" shape="rect" coords="423,0,554,24"/>
</map>
 </div></div>

<p><a href="classControladorServidor-members.html">Lista de todos los miembros.</a></p>
<table class="memberdecls">
<tr><td colspan="2"><h2><a name="pub-methods"></a>
Métodos públicos</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classRespuesta.html">Respuesta</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classControladorServidor.html#a45d1f810987e11a222986ecf588ac497">resolverEntrada</a> (<a class="el" href="classConsulta.html">Consulta</a> &amp;entrada)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classRespuesta.html">Respuesta</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classControladorServidor.html#a1ca5d73913116531b23e8c998f51f18b">resolver</a> (<a class="el" href="classConsulta.html">Consulta</a> &amp;consulta)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classControladorServidor.html#a62668a91f2eeb6fe13d7a4079e023ac8">ControladorServidor</a> (<a class="el" href="classResolvedorConsultas.html">ResolvedorConsultas</a> &amp;cons, <a class="el" href="classResolvedorEntradas.html">ResolvedorEntradas</a> &amp;rent, Puerto pclientes, Puerto pagentes)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classControladorServidor.html#a492e61d31b759540ec76a1ca2c7bb875">activo</a> ()</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classControladorServidor.html#abe83c8c099a41bae0ff648e0b7281741">~ControladorServidor</a> ()</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classControladorServidor.html#aaa97dc23fdf70cf91004bdb654b72585">agregarCliente</a> (<a class="el" href="classClienteRemoto.html">ClienteRemoto</a> *rem)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classControladorServidor.html#ad323cf3309ee0ddc8737c16a48432c28">agregarAgente</a> (<a class="el" href="classAgenteRemoto.html">AgenteRemoto</a> *agt)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classControladorServidor.html#aa50662d57613d4e161790f6e9dc1c299">comenzar</a> ()</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classControladorServidor.html#aa8f33c7beb356148089072234a2619b4">detener</a> ()</td></tr>
</table>
<hr/><a name="details" id="details"></a><h2>Descripción detallada</h2>
<div class="textblock"><p>Esta clase es fundamental. Su rol es controlar el flujo correcto de resolución de consultas y actualizaciones. Se encarga de permitir que el servidor maneje múltiples consultas, como también de frenarlas cuando se requiera de procesar actualizaciones. Contiene un Pool de "workers", cada uno con una dedicación a alguna de las tareas ya sean de actualización como de consultas. Implementa interfaces como <a class="el" href="classResolvedorConsultas.html">ResolvedorConsultas</a>, <a class="el" href="classResolvedorEntradas.html">ResolvedorEntradas</a>, <a class="el" href="classContenedorClientes.html">ContenedorClientes</a> y <a class="el" href="classContenedorAgentes.html">ContenedorAgentes</a>, que hace que sus "workers" sólo vean lo que necesiten ver del controlador.</p>
<p>Es la clase encargada también de manejar los hilos que se encargan de recibir clientes y agentes. En definitiva, es el encargado de la coordinacion de la concurrencia del servidor. </p>
</div><hr/><h2>Documentación del constructor y destructor</h2>
<a class="anchor" id="a62668a91f2eeb6fe13d7a4079e023ac8"></a><!-- doxytag: member="ControladorServidor::ControladorServidor" ref="a62668a91f2eeb6fe13d7a4079e023ac8" args="(ResolvedorConsultas &amp;cons, ResolvedorEntradas &amp;rent, Puerto pclientes, Puerto pagentes)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classControladorServidor.html#a62668a91f2eeb6fe13d7a4079e023ac8">ControladorServidor::ControladorServidor</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="classResolvedorConsultas.html">ResolvedorConsultas</a> &amp;&#160;</td>
          <td class="paramname"><em>cons</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype"><a class="el" href="classResolvedorEntradas.html">ResolvedorEntradas</a> &amp;&#160;</td>
          <td class="paramname"><em>rent</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Puerto&#160;</td>
          <td class="paramname"><em>pclientes</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">Puerto&#160;</td>
          <td class="paramname"><em>pagentes</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Constructor de controladorServidor. </p>
<dl class="params"><dt><b>Parámetros:</b></dt><dd>
  <table class="params">
    <tr><td class="paramname">cons</td><td>Objeto que resuelva las consultas. </td></tr>
    <tr><td class="paramname">rent</td><td>Objeto que resuelva las entradas. </td></tr>
    <tr><td class="paramname">pclientes</td><td>Puerto por el cual se escucharán conexiones entrantes de los clientes. </td></tr>
    <tr><td class="paramname">pagentes</td><td>Puerto por el cual se escucharán conexiones entrantes de los agentes. </td></tr>
  </table>
  </dd>
</dl>

</div>
</div>
<a class="anchor" id="abe83c8c099a41bae0ff648e0b7281741"></a><!-- doxytag: member="ControladorServidor::~ControladorServidor" ref="abe83c8c099a41bae0ff648e0b7281741" args="()" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classControladorServidor.html#abe83c8c099a41bae0ff648e0b7281741">ControladorServidor::~ControladorServidor</a> </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>El destructor del controlador. Si esta en ejecución, libera toda la memoria que corresponda, cerrando conexiones y deteniendo hilos. </p>

</div>
</div>
<hr/><h2>Documentación de las funciones miembro</h2>
<a class="anchor" id="a492e61d31b759540ec76a1ca2c7bb875"></a><!-- doxytag: member="ControladorServidor::activo" ref="a492e61d31b759540ec76a1ca2c7bb875" args="()" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">bool <a class="el" href="classControladorServidor.html#a492e61d31b759540ec76a1ca2c7bb875">ControladorServidor::activo</a> </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Método utilizado para saber si las entradas siguen activas. </p>

</div>
</div>
<a class="anchor" id="ad323cf3309ee0ddc8737c16a48432c28"></a><!-- doxytag: member="ControladorServidor::agregarAgente" ref="ad323cf3309ee0ddc8737c16a48432c28" args="(AgenteRemoto *agt)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classControladorServidor.html#ad323cf3309ee0ddc8737c16a48432c28">ControladorServidor::agregarAgente</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="classAgenteRemoto.html">AgenteRemoto</a> *&#160;</td>
          <td class="paramname"><em>agt</em></td><td>)</td>
          <td><code> [virtual]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>El método que permite agregar un agente remoto a su lista. Es el heredado de la interfaz <a class="el" href="classContenedorAgentes.html">ContenedorAgentes</a>. </p>

<p>Implementa <a class="el" href="classContenedorAgentes.html#a5e701061672c9cb813fc468a79979475">ContenedorAgentes</a>.</p>

</div>
</div>
<a class="anchor" id="aaa97dc23fdf70cf91004bdb654b72585"></a><!-- doxytag: member="ControladorServidor::agregarCliente" ref="aaa97dc23fdf70cf91004bdb654b72585" args="(ClienteRemoto *rem)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classControladorServidor.html#aaa97dc23fdf70cf91004bdb654b72585">ControladorServidor::agregarCliente</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="classClienteRemoto.html">ClienteRemoto</a> *&#160;</td>
          <td class="paramname"><em>rem</em></td><td>)</td>
          <td><code> [virtual]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>El método que permite agregar un cliente remoto a su lista. Es el heredado de la interfaz <a class="el" href="classContenedorClientes.html">ContenedorClientes</a>. </p>

<p>Implementa <a class="el" href="classContenedorClientes.html">ContenedorClientes</a>.</p>

</div>
</div>
<a class="anchor" id="aa50662d57613d4e161790f6e9dc1c299"></a><!-- doxytag: member="ControladorServidor::comenzar" ref="aa50662d57613d4e161790f6e9dc1c299" args="()" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classControladorServidor.html#aa50662d57613d4e161790f6e9dc1c299">ControladorServidor::comenzar</a> </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Se encarga de inicar los hilos correspondientes a los que escuchan conexiones y a los pools de workers. </p>

</div>
</div>
<a class="anchor" id="aa8f33c7beb356148089072234a2619b4"></a><!-- doxytag: member="ControladorServidor::detener" ref="aa8f33c7beb356148089072234a2619b4" args="()" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classControladorServidor.html#aa8f33c7beb356148089072234a2619b4">ControladorServidor::detener</a> </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Se encarga de detener todos los hilos, tanto los workers como los que escuchan conexiones ingresantes, cierra las colas de consultas y realiza tareas varias previas a la destruccion del mismo. </p>

</div>
</div>
<a class="anchor" id="a1ca5d73913116531b23e8c998f51f18b"></a><!-- doxytag: member="ControladorServidor::resolver" ref="a1ca5d73913116531b23e8c998f51f18b" args="(Consulta &amp;consulta)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classRespuesta.html">Respuesta</a> <a class="el" href="classControladorServidor.html#a1ca5d73913116531b23e8c998f51f18b">ControladorServidor::resolver</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="classConsulta.html">Consulta</a> &amp;&#160;</td>
          <td class="paramname"><em>consulta</em></td><td>)</td>
          <td><code> [virtual]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Este método es el encargado de resolver las consultas. Si hay entradas resolviéndose en el momento de la llamada, este método quedará bloqueado hasta que pueda realizar la consulta. Sin embargo no se bloqueara si otras consultas están en proceso, permitiendo la resolución de consultas de forma concurrente. </p>

<p>Implementa <a class="el" href="classResolvedorConsultas.html#a077d3d962848e14a84790d5a929fea17">ResolvedorConsultas</a>.</p>

</div>
</div>
<a class="anchor" id="a45d1f810987e11a222986ecf588ac497"></a><!-- doxytag: member="ControladorServidor::resolverEntrada" ref="a45d1f810987e11a222986ecf588ac497" args="(Consulta &amp;entrada)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classRespuesta.html">Respuesta</a> <a class="el" href="classControladorServidor.html#a45d1f810987e11a222986ecf588ac497">ControladorServidor::resolverEntrada</a> </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="classConsulta.html">Consulta</a> &amp;&#160;</td>
          <td class="paramname"><em>entrada</em></td><td>)</td>
          <td><code> [virtual]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Este método es el encargado de resolver las actualizaciones. Si hay consultas resolviéndose en el momento de la llamada, quedará bloqueado hasta que pueda realizar la actualización. </p>

<p>Implementa <a class="el" href="classResolvedorEntradas.html#a197be7d4db0a07250a51c2c390dd2372">ResolvedorEntradas</a>.</p>

</div>
</div>
<hr/>La documentación para esta clase fue generada a partir de los siguientes ficheros:<ul>
<li>servidor/servidor/<a class="el" href="ControladorServidor_8h_source.html">ControladorServidor.h</a></li>
<li>servidor/servidor/ControladorServidor.cpp</li>
</ul>
</div><!-- contents -->
</div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>Todo</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Clases</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Funciones</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Enumeraciones</a></div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

  <div id="nav-path" class="navpath">
    <ul>
      <li class="navelem"><a class="el" href="classControladorServidor.html">ControladorServidor</a>      </li>

    <li class="footer">Generado el Martes, 10 de Julio de 2012 15:15:16 para MIC por
    <a href="http://www.doxygen.org/index.html">
    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.6.1 </li>
   </ul>
 </div>


</body>
</html>
